package com.start.pay.core.event;

import com.start.common.event.StartBaseEvent;
import com.start.pay.core.entity.StartPayOrderEntity;

public interface StartPayOrderEvent extends StartBaseEvent {
    /**
     * 业务类型
     *
     * @return
     */
    default String businessType() {
        return null;
    }

    /**
     * appId
     *
     * @return
     */
    default String appId() {
        return null;
    }

    /**
     * 平台类型
     *
     * @return
     */
    default String platformType() {
        return null;
    }

    /**
     * 标签
     *
     * @return
     */
    default String orderTags() {
        return null;
    }

    /**
     * 订单创建前
     *
     * @param entity
     */
    void onCreateOrderBefore(StartPayOrderEntity entity);

    /**
     * 订单创建后
     *
     * @param entity
     */
    void onCreateOrderAfter(StartPayOrderEntity entity);

    void onCancelOrderBefore(StartPayOrderEntity entity);

    void onCancelOrderAfter(StartPayOrderEntity entity);

    void onPayOrderBefore(StartPayOrderEntity entity);

    void onPayOrderAfter(StartPayOrderEntity entity);

    void onPayOrderSuccess(StartPayOrderEntity entity);

    /**
     * 支付订单异常
     *
     * @param entity
     * @param error
     */
    void onPayOrderError(StartPayOrderEntity entity, Object error);

    void onOrderRefundBefore(StartPayOrderEntity entity);

    void onOrderRefundAfter(StartPayOrderEntity entity);

    void onOrderRefundSuccess(StartPayOrderEntity entity);

    /**
     * 退款错误
     *
     * @param entity
     * @param error
     */
    void onOrderRefundError(StartPayOrderEntity entity, Object error);

    /**
     * 交易关闭
     *
     * @param entity
     */
    default void onOrderClose(StartPayOrderEntity entity) {
        return;
    }

    /**
     * 发生严重错误
     *
     * @param error
     */
    default void onError(Object error) {
    }
}
